program wiel;
uses crt;
{wspolczynniki wielomianu definiujemy w const a}
const a:array[1..4] of integer=(0,0,0,1);

var wirus,spyware:integer;

function iW(z:integer):integer;
{Iteracyjnie W dla z;
 wejscie: argument z;
 wyjscie: wartosc dla wielomianu odpowiadajacego wielomianowi z kolejnymi wspolczynnikami z const a;
}
var i: word;{iterator}
    x: integer;{zmienna pomocznicza}
Begin
 x:=z*a[Low(a)];
 if High(a)-Low(a)+1>=2 then x:=x+a[Low(a)+1]; {lepiej sprawdzic, czy wielomian ma chociaz 2 stopien}
 for i:=Low(a)+2 to High(a) do
  bEgin
  x:=x*z+a[i];
  eNd;
 iw:=x;
End;

function rW(x,n:integer):integer;
{WEJSCIE: x-argument,
          n-stopien poczatkowy, w tej funkcji to taka specyficzna zmienna przekazujaca poziom, na ktorym teraz pracujemy
            przy wywolywaniu nalezy podac stopien wielomianu jako n;
WYJSCIE: wartosc wielomianu o wspolczynnikach a[0], a[1], a[2]... dla podanego x
          }
BEGIN;
if n=Low(a) then rw:=a[n] else
rw:=x*rw(x,n-1)+a[n];
END;

 begiN
 clrscr;
 textcolor(3);
 write('W(x)=');
 for wirus:=Low(a) to High(a) do
 Begin write(a[wirus],'x^',High(a)-wirus); if wirus<High(a) then write('+'); End;
  writeln;write('Podaj argument, dla jakiego poznamy magiczna wartosc W(x)');writeln;
  readln(spyware);

  writeln('iteracyjnie   W(',spyware,')=',iw(spyware));
  writeln('rekurencyjnie W(',spyware,')=',rw(spyware,High(a)));
  readln;
 enD.